package com.chengxiaoxiao.ai_demo.api;

import com.chengxiaoxiao.ai_demo.entity.InstructionInfo;
import com.chengxiaoxiao.ai_demo.vo.PageResult;
import com.chengxiaoxiao.ai_demo.vo.Result;
import com.chengxiaoxiao.ai_demo.vo.query.InstructionInfoQuery;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;

import java.util.List;


/**
 * 指令信息 接口Swagger Api
 *
 * @Description:
 * @Author: Cheng Xiaoxiao
 * @Date: 2025-03-18 10:02:00
 */
@Tag(name = "指令信息模块")
public interface InstructionInfoControllerApi {


    /**
     * 按照条件查询指令信息
     *
     * @param instructionInfoQuery 查询条件
     * @return 结果信息
     */
    @Operation(summary = "按照条件查询指令信息")
    Result<List<InstructionInfo>> list(@Parameter(description = "查询条件") InstructionInfoQuery instructionInfoQuery);

    /**
     * 分页及条件查询指令信息
     *
     * @param page                 页码
     * @param size                 分页大小
     * @param instructionInfoQuery 查询条件
     * @return 分页结果信息
     */
    @Operation(summary = "分页及条件查询指令信息")
    Result<PageResult<InstructionInfo>> search(@Parameter(description = "页码大小") Long size,
                                               @Parameter(description = "当前页") Long page,
                                               @Parameter(description = "查询条件") InstructionInfoQuery instructionInfoQuery);

    /**
     * 根据ID获取指令信息详情
     *
     * @param id 指令信息ID
     * @return 指令信息详细信息
     */
    @Operation(summary = "获取单个指令信息详情")
    Result<InstructionInfo> detail(@Parameter(description = "指令信息ID") String id);

    /**
     * 增加指令信息
     *
     * @param instructionInfo 指令信息增加实体
     * @return 增加后的指令信息
     */
    @Operation(summary = "增加指令信息")
    Result<InstructionInfo> add(InstructionInfo instructionInfo);

    /**
     * 修改指令信息
     *
     * @param id              指令信息ID
     * @param instructionInfo 指令信息修改实体
     * @return 修改后的指令信息
     */
    @Operation(summary = "修改指令信息")
    Result<InstructionInfo> updateById(@Parameter(description = "指令信息ID") String id, InstructionInfo instructionInfo);

    /**
     * 删除指令信息
     *
     * @param id 指令信息ID
     * @return 删除结果信息
     */
    @Operation(summary = "删除单个指令信息")
    Result<Boolean> deleteById(@Parameter(description = "指令信息ID") String id);

    /**
     * 删除指令信息
     *
     * @param idList 指令信息ID数组
     * @return 删除结果信息
     */
    @Operation(summary = "批量删除指令信息")
    Result<Boolean> batchRemove(@Parameter(description = "ID集合") List<String> idList);
}
